Multinúcleo
La asignación de la tarea y el núcleo de la CPU se muestra en Configuración de tareas objeto en el Pestaña: Grupos de tareas pestaña.
Cada vez son más los controladores actuales que tienen procesadores con varios núcleos de CPU.
Si CODESYS se ejecuta en un controlador multinúcleo sin utilizar la función multinúcleo, entonces la distribución de las tareas la gestiona el planificador del sistema operativo. Esto es cierto siempre que una aplicación se ejecute con varias tareas. En este caso, usted no tiene ninguna influencia directa sobre la distribución de las tareas. En función del equilibrio de carga, las tareas también pueden ejecutarse en diferentes núcleos de CPU.
Con el CODESYS Función multinúcleo: las tareas IEC se pueden asignar a núcleos de CPU dedicados, teniendo en cuenta la cantidad de núcleos de CPU adquiridos. Esto puede generar un mejor rendimiento. Para este propósito, el programa IEC debe dividirse en varias tareas.
Al distribuir las tareas IEC a los núcleos de la CPU, hay en CODESYS dos estrategias fundamentalmente diferentes:
Tarea de IEC que está vinculada y fija a un núcleo de CPU:
La tarea siempre se ejecuta en este núcleo de CPU específico. Se pueden vincular varias tareas a un núcleo de CPU agrupándolas. Esto es útil, por ejemplo, si el programa IEC aún no puede ejecutarse en varios núcleos de CPU simultáneamente
La tarea IEC se ejecuta en todos los núcleos de la CPU:
El sistema operativo toma el control de la distribución de una o más tareas de un grupo en los núcleos de la CPU.
Importante
Cuando las tareas IEC se distribuyen entre los núcleos de la CPU, se producen algunos cambios en el comportamiento del programa IEC, que deben tenerse en cuenta.
¡Ya no se da el procesamiento de las tareas IEC según la prioridad! Las tareas solo se procesan según su prioridad si están vinculadas a un núcleo de CPU.
La coherencia cíclica de los datos en la tarea de IEC con la máxima prioridad ya no es un hecho. Por lo tanto, los datos deben copiarse localmente al principio del ciclo de tareas de la IEC si los valores no cambian durante el
Para todas las tareas, hay una imagen de proceso compartida desde la que funcionan las tareas.
ReadInputs()
la función se llama al inicio de cada tarea y elWriteOutputs()
la función se llama al final. Como resultado, el modelo de IPO se aplica a cada tarea de forma individual. Estas funciones leen y escriben en la imagen de proceso compartida. La imagen del proceso también se escribe físicamente y los paquetes se transmiten solo cuando se llama a la tarea del ciclo del autobús. Sin embargo, la tarea de bicicleta de autobús espera cada llamadaWriteOutputs
yReadInputs
de las tareas. Esto garantiza la coherencia de los datos dentro de la tarea del ciclo del autobús.Las salidas se pueden asignar sólo a una tarea.
Las entradas se pueden asignar a múltiples tareas, pero se debe evitar el acceso directo. Las entradas deben escribirse en variables locales de la tarea mediante operaciones atómicas.
Una segunda tarea, que actualiza la imagen del proceso con
ReadInputs()
En paralelo a la primera tarea, también actualiza las entradas de la primera tarea mientras se está ejecutando.Como resultado, la coherencia de los datos de una tarea se garantiza solo en núcleos individuales para la tarea de mayor prioridad.
Sugerencia
Puede configurar la tarea del ciclo del autobús en el Configuración del PLC pestaña.
Puede mostrar el acceso de E/S en la Pestaña: Implementación de tareas pestaña.
Para obtener más información, consulte: Tarea de ciclo de autobús
Para contadores consistentes (incrementadores, decrementadores) siempre debe usar la función de biblioteca externa atómica
SysCpuAtomicAdd()
ser utilizado (para más detalles ver:SysCpuHandling.library
)
Importante
Consistencia de los datos
Accesos a bits (tipo de datos
BIT
) no se procesan de forma coherente (atómica) en el programa IEC en CPU multinúcleo. Para esto recomendamos usar la función de biblioteca externaSysCpuTestAndSetBit()
. (Para más detalles verSysCpuHandling.library
)Tipos de datos simples de hasta 32 bits de ancho (
BOOL
,BYTE
,WORD
/INT
,DWORD
/DINT
, etc.) también se procesan de manera consistente (atómica) en el programa IEC en CPU multinúcleo.Tipos de datos con 64 bits (
LINT
,LWORD
, yLREAL
) se procesan de forma coherente (atómica) en el programa IEC únicamente en sistemas de 64 bits y sistemas multinúcleo. Para ello, no necesita tomarPara acceder a tipos de datos complejos (
STRING
,FB
,STRUCT
, yARRAY
), debe hacer los arreglos usted mismo para la sincronización/coherencia.Puedes en la configuración de tareas en la pestaña uso variable determinar si una variable en una tarea IEC tiene acceso de lectura o escritura.
En los sistemas multinúcleo, puede producirse un «efecto de reordenamiento de la memoria». Para obtener más información, consulte: Operador IEC:
__MemoryBarrier()
.
Distribuya tareas a través de múltiples núcleos de procesador
Requisito: se definen al menos dos tareas en su aplicación, por ejemplo MainTask
(IEC-Task) y LowTask
(Tarea de IEC).
Abre el objeto configuración de tareas en el bloc de notas.
Cambie a Grupos de tareas pestaña.
La descripción general muestra el valor predeterminado Tareas de IEC grupo de tareas.
Agregar con el botón Añadir grupo agregar un nuevo grupo de tareas.
El
NewGroup
se agrega el grupo.Haga doble clic en el nombre del grupo
NewGroup
y cámbielo aLowGroup
.Elija debajo Centro una tarea, por ejemplo 1.
Abre la tarea
LowTask
(IEC-Task) en el editor.En Grupo de tareas, seleccione el nuevo grupo
LowGroup
.El
LowTask
la tarea ahora es procesada por el procesador core 1 debido a su pertenencia al grupo enLowGroup
.
Mostrar la utilización del procesador por núcleo de procesador en el seguimiento
puedes entrar CODESYS la utilización del procesador en un objeto seguimiento del dispositivo visualizar.
Para obtener más información sobre cómo se muestran los seguimientos de dispositivos en el proyecto, consulte: Acceso a todos los rastros del controlador.